<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>js hello</title>
	</head>
	
	
	<body>
		
		
		
		
		<!-- <script>
			//数组的创建
			let arr1=new Array();//不常用
			let arr2=[];//常用
			let arr3=[1,2,3,4];
			let arr4=[1,'hello',[],null,undefined,true];
			let arr5=[1,2,3,4];
			let arr6=[1,2,3,4];
			let arr7=[1,2,3,4];
			let arr8=[1,2,3,4];
			console.log(arr1);
			console.log(arr2); 
			console.log(arr3);
			console.log(arr4);
			console.log(arr4[5]);
			
			
			
			console.log(arr4[100]);
			console.log(arr4[-1]);
			//js当我们访问一个超出范围的下标的时候，得到的结果是unde，并不会向java一样抛出异常
			
			
			arr5[100]=10;
			console.log(arr5);
			//长度变为101，然后数组的内容前四个元素还是不变，下标为100的元素是10
			//但是中间的空属性 *96意思是，中间这些元素仍然是unde
			
			
			arr6[-1]=10;
			console.log(arr6);
			console.log(arr6[-1]);//10
			 // 此时-1与其说是一个下标，不如说是一个"属性"，并不会影响数组的长度arr6的length还是4
			 
			 
			 arr7['hello']=10;
			 arr7.cat=20;
			 console.log(arr7);
			 console.log(arr7['hello']);
			 console.log(arr7['cat']);
			 //js中的数组不是一个正经数组
			 //除了能接数组的活，还能接map的活（表示键值对）=>这里说数组是一个map，更准确的说是一个对象
			 //在js里是可以在运行时给对象新增属性的
			 //arr['hello']就是在给arr这个对象新增了一个属性，属性的名字是hello，属性的值是10
			 
			 
			 arr8.length=3;
			 console.log(arr8);
			 arr8.length=5;
			 console.log(arr8);
			 //js数组可以改长度 短就删长就补（空属性）
			 
			 
			 
			let arr9=[];
			for(let i=0;i<10;i++){
				arr9.push(i);
			}
			console.log(arr9);
			//push能够给数组末尾追加一个元素
			
			
			 let arr10=[1,2,3,4,5,6];
			 arr10.splice(2,2)
			 console.log(arr10);
			 
			 let arr11=[1,2,3,4,5,6];
			 arr11.splice(2,3,100,200,300);
			 console.log(arr11);
			 
			 //splice这个方法，针对数组中的区间进行删除   但也可以替换元素或者插入元素（将二号位改为0就可以了）
			 
			 
		</script> -->
		
		 
		
		

		
		<!-- <script>
			let a=20;
			let b=10;
			c=a||b;
			// 如果a的值为真（非0），此时c的值就是表达式a的值
			// 如果a的值为假（为0），此时c的值就是表达式b的值
			console.log(c);
			
			
			d=a&&b;
			// 如果a的值为真（非0），此时d的值就是表达式b的值
			// 如果a的值为假（为0），此时d的值就是表达式a的值
			console.log(d);
			
			
			console.log(1/2);//0.5
			//js中不区分整数和小数
			
		</script> -->
		
		
		
		
		
		<!-- <script>
			// ==   ！= （会进行隐式类型转换比值）和 ===  ！===（不会进行隐式类型转化比值）
			let a=10;
			let b='10';
			console.log(a==b);//true
			console.log(a===b);//false
		</script> -->
		
		
		
		
		
		<!-- <script>
			//undefined 这个类型只有undefined这一个取值
			let c;
			console.log(c);
			//undefined 表示一个未被初始化的变量（非法情况）基本不用
			
			let b=null;
			console.log(b);
			//null表示当前这个值"没有值"这个概念（合法情况） 
			
			
			
			//js的布尔类型可以和数字相加 false就是0 true就是1
			let a=true;
			console.log(a+1)//2
			//length
			 let s1="hello world";
			 console.log(s1.length);//11
			 
			 let s2="猫哥";
			 console.log(s2.length);//2
		</script> -->
		
		
		
		
		<!-- <script> 
			let s1=" my name is 'maoge' ";
			console.log(s1);
			
			let s2=' my name is "gouge" ';
			console.log(s2);
			 
			 let s3=" my 'name' is \"asd\" ";
			 console.log(s3);
		</script> -->
		

		
		
		
		<!-- <script>
			console.log('hello'-10);
			// 不会报错 但是会出现NaN（运算结果得到的不是数字的值就会出现）
			// 如果加换成＋会出现和java一样字符串相连的效果

			
			{
				var b=10;
			}
			console.log(b);//不会报错
			
			{
				let c=10;
			}
			console.log(c);//会报错
			
			//创建变量  可以不初始化 但变量是一个特殊的值undefined，类型也就是undefined类型
			var num=10; //数字类型 js不区分整形和浮点型
			var s='hello';//字符串类型
			var arr=[];//数组类型
			
			num=20;
			console.log(num);
			//动态类型 变量的类型，可以在运行过程中，随赋值而改变
			num='hello';
			console.log(num);
		</script> -->
		
		
		
		
		
		
		
		<!-- 读取 console.log -->
		<!-- <script>
			console.log("猫哥");
			// 此时内容是输入到浏览器内部的控制台；控制台也有出错提示
		</script> -->
		
		
		
		
		
		
		<!-- 一个script只能运行一个js代码 -->
		
		<!-- <script src="js/app.js">
			alert('helloword');
			// 不运行
		</script> -->
		 
		
		
		
		
		
		<!-- <button onclick=alert('hello')>这是一个按钮</button> -->
		
		<!-- <script>
			 alert('helloword');
		</script> -->
		
		
		
	</body>
</html>